package alogrithm.solution;

import java.util.Stack;

/*
 * 29.栈的push、pop序列
题目：输入两个整数序列。其中一个序列表示栈的push顺序，
判断另一个序列有没有可能是对应的pop顺序。
为了简单起见，我们假设push序列的任意两个整数都是不相等的。   

比如输入的push序列是1、2、3、4、5，那么4、5、3、2、1就有可能是一个pop系列。
因为可以有如下的push和pop序列：
push 1，push 2，push 3，push 4，pop，push 5，pop，pop，pop，pop，
这样得到的pop序列就是4、5、3、2、1。
但序列4、3、5、1、2就不可能是push序列1、2、3、4、5的pop序列。
 */
public class P29 {
	public static boolean func(int push[],int pop[])
	{
		if(push==null||pop==null)return false;
		int i=0,j=0;
		int l1=push.length,l2=pop.length;
		Stack<Integer> s=new Stack<Integer>();
		while(j!=l2)
		{
			int temp=pop[j];
			if((!s.isEmpty())&&s.peek()==temp)
			{
				s.pop();
				j++;
			}
			else
			{
				while(i!=l1&&push[i]!=temp)s.push(push[i++]);
				if(i==l1)return false;
				else
				{
					s.push(push[i++]);
				}
			}
		}
		if(s.isEmpty()&&i==l1)return true;
		return false;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int push[]={1,2,3,4,5,6};
		int pop[]={4,5,3,2,1};
		System.out.println(func(push,pop));

	}

}
